﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormContasAPagar : Form
    {
        private string operacao = "";

        public FormContasAPagar()
        {
            InitializeComponent();
        }

        private void FormContasAPagar_load(object sender, EventArgs e)
        {
            //Popular a lista de pagamentos cadastrados
            this.dateTimePickerIni.Value = DateTime.Today;
            this.dateTimePickerFim.Value = DateTime.Today;

            List<FormaPagamentoVO> listFormaPagamentoVOs= ModelBO.getFormaPagamentos();
            listFormaPagamentoVOs.Add(FormaPagamentoVO.CreateFormaPagamentoVO(-1,""));
            this.comboBoxFormaPagamento.DataSource = listFormaPagamentoVOs;

            buttonCancelar_Click(sender, e);
        }

        private void dataGridViewPagamento_SelectionChanged(object sender, EventArgs e)
        {
            setupButtonsControls();
        }

        private void buttonNovo_Click(object sender, EventArgs e)
        {
            this.operacao = "novo";
            setupButtonsControls();
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.operacao = "cancelar";
            setupButtonsControls();
        }

        private void buttonEditar_Click(object sender, EventArgs e)
        {
            this.operacao = "editar";
            setupButtonsControls();
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            this.operacao = "excluir";

            List<PagamentoVO> pagamentoList = (List<PagamentoVO>)this.dataGridViewPagamento.DataSource;
            PagamentoVO pagamento = pagamentoList[this.dataGridViewPagamento.CurrentRow.Index];
            DialogResult dr = MessageBox.Show(this, "Confirma a exclusão do pagamento " + pagamento.pagamento, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                ModelBO.delPagamento(pagamento);

                this.dataGridViewPagamento.DataSource = ModelBO.getPagamentos();
                setupButtonsControls();
            }
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            String erros = "";
            if (this.textBoxReferencia.Text.Trim().Length == 0)
                erros = erros + "Referência deve ser informada.\r\n";

            if (this.checkBoxPago.Checked && (int)this.comboBoxFormaPagamento.SelectedValue == -1)
                erros = erros + "Forma de pagamento deve ser informado quando houver pagamento.\r\n";

            if (erros.Length > 0)
            {
                MessageBox.Show(this, erros, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            PagamentoVO pagamento = null;

            if (this.operacao.Equals("novo"))
            {
                pagamento = PagamentoVO.CreatePagamentoVO();
                pagamento.pagamento = this.textBoxReferencia.Text;
                pagamento.dtVencimento = this.dateTimePickerVcto.Value;
                pagamento.valor = this.numericUpDownValor.Value;
                if (this.checkBoxPago.Checked)
                {
                    pagamento.dtPagamento = this.dateTimePickerPgto.Value;
                    pagamento.valorPago = this.numericUpDownValorPgto.Value;
                    pagamento.formaPagamentoVO.idFormaPagamento = (int)this.comboBoxFormaPagamento.SelectedValue;
                }

                ModelBO.newPagamento(pagamento);
            }
            if (this.operacao.Equals("editar"))
            {
                List<PagamentoVO> pagamentoList = (List<PagamentoVO>)this.dataGridViewPagamento.DataSource;
                pagamento = pagamentoList[this.dataGridViewPagamento.CurrentRow.Index];

                pagamento.pagamento = this.textBoxReferencia.Text;
                pagamento.dtVencimento = this.dateTimePickerVcto.Value;
                pagamento.valor = this.numericUpDownValor.Value;
                if (this.checkBoxPago.Checked)
                {
                    pagamento.dtPagamento = this.dateTimePickerPgto.Value;
                    pagamento.valorPago = this.numericUpDownValorPgto.Value;
                    pagamento.formaPagamentoVO.idFormaPagamento = (int)this.comboBoxFormaPagamento.SelectedValue;
                }
                else
                {
                    pagamento.dtPagamento = null;
                    pagamento.valorPago = 0;
                    pagamento.formaPagamentoVO.idFormaPagamento = -1;
                }

                ModelBO.setPagamento(pagamento);
            }
            this.operacao = "salvar";

            buttonPesquisar_Click(sender,e);
            setupButtonsControls();
        }


        private void setupButtonsControls()
        {
            bool haRows = this.dataGridViewPagamento.Rows.Count > 0 && this.dataGridViewPagamento.CurrentRow!=null;
            bool novo = this.operacao.Equals("novo");
            bool edit = this.operacao.Equals("editar");
            bool canc = this.operacao.Equals("cancelar");

            this.buttonCancelar.Enabled = novo || edit;
            this.buttonNovo.Enabled = !novo && !edit;
            this.buttonEditar.Enabled = haRows && !novo && !edit;
            this.buttonExcluir.Enabled = haRows && !novo && !edit;
            this.buttonSalvar.Enabled = novo || edit;

            this.textBoxReferencia.Enabled = novo || edit;
            this.dateTimePickerVcto.Enabled = novo || edit;
            this.numericUpDownValor.Enabled = novo || edit;
            this.dateTimePickerPgto.Enabled = novo || edit;
            this.checkBoxPago.Enabled = novo || edit;
            this.numericUpDownValorPgto.Enabled = novo || edit;
            this.comboBoxFormaPagamento.Enabled = novo || edit;
            this.dataGridViewPagamento.Enabled = !novo && !edit;

            if (!haRows || novo)
            {
                this.textBoxId.Text = "";
                this.textBoxReferencia.Text = "";
                this.dateTimePickerVcto.Value = DateTime.Now;
                this.numericUpDownValor.Value = 0;
                this.checkBoxPago.Checked = false;
                this.dateTimePickerPgto.Value = DateTime.Now;
                this.numericUpDownValorPgto.Value = 0;
                this.comboBoxFormaPagamento.SelectedValue = -1;
            }
            else
            {
                List<PagamentoVO> pagamentoList = (List<PagamentoVO>)this.dataGridViewPagamento.DataSource;
                PagamentoVO pagamento = pagamentoList[this.dataGridViewPagamento.CurrentRow.Index];
                this.textBoxId.Text = pagamento.idPagamento.ToString();
                this.textBoxReferencia.Text = pagamento.pagamento;
                this.dateTimePickerVcto.Value = pagamento.dtVencimento;
                this.numericUpDownValor.Value = pagamento.valor;
                this.checkBoxPago.Checked = pagamento.dtPagamento != null;
                if (pagamento.dtPagamento != null)
                {
                    this.dateTimePickerPgto.Value = (DateTime)pagamento.dtPagamento;
                    this.numericUpDownValorPgto.Value = pagamento.valorPago;
                    this.comboBoxFormaPagamento.SelectedValue = pagamento.formaPagamentoVO.idFormaPagamento;
                }
            }
            if (novo || edit){
                this.textBoxReferencia.Focus();
            }
        }

        private void checkBoxPago_CheckedChanged(object sender, EventArgs e)
        {
            this.labelPgto.Visible = this.checkBoxPago.Checked;
            this.labelVlrPago.Visible = this.checkBoxPago.Checked;
            this.labelFormaPagamento.Visible = this.checkBoxPago.Checked;
            this.dateTimePickerPgto.Visible = this.checkBoxPago.Checked;
            this.numericUpDownValorPgto.Visible = this.checkBoxPago.Checked;
            this.comboBoxFormaPagamento.Visible = this.checkBoxPago.Checked;
        }

        private void buttonPesquisar_Click(object sender, EventArgs e)
        {
            this.dataGridViewPagamento.DataSource = ModelBO.getPagamentos(null,
                 this.radioButtonEmAberto.Checked, this.radioButtonPagos.Checked,
                 this.dateTimePickerIni.Value, this.dateTimePickerFim.Value, null, null);
            setupButtonsControls();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            NumeroPorExtenso npe = new NumeroPorExtenso(this.numericUpDownValorPgto.Value);

            EmpresaVO empresaVO = ModelBO.getEmpresa(int.Parse(ModelBO.getParametro("Empresa Ativa")));
            List<EmpresaVO> listEmpresaVOs = new List<EmpresaVO>();
            listEmpresaVOs.Add(empresaVO);

            FormReportRecibo formx = new FormReportRecibo();
            formx.MdiParent = this.MdiParent;
            formx.setDataSource(listEmpresaVOs, empresaVO.nome,"", "CNPJ", empresaVO.CNPJ, this.numericUpDownValorPgto.Value, npe.ToString(), empresaVO.cidade,this.textBoxReferencia.Text);
            formx.Show();

        }

     }
}
